"""
编写一个函数 top_primes，该函数接受一个整数列表和一个关键字参数 n（默认值为3）。
函数应使用列表推导式返回原始列表中的前 n 个质数

    例如：	result = top_primes([4, 5, 6, 7, 8, 9, 10, 2, 3], n=4)
            print(result) # 输出：[5, 7, 2, 3]
"""


def is_prime(num):
    """
    判断一个数是否为质数

    Args:
        num: 要判断的数字

    Returns:
        bool: 是否为质数
    """
    # 处理小于2的数和2
    if num < 2:
        return False
    if num == 2:
        return True

    # 偶数直接返回False（除了2）
    if num % 2 == 0:
        return False

    # 只需检查到平方根，且只检查奇数
    return all(num % i != 0 for i in range(3, int(num ** 0.5) + 1, 2))


def top_primes(numbers, *, n=3):
    """
    从数字列表中找出前n个质数

    Args:
        numbers: 整数列表
        n: 需要返回的质数数量（默认为3）

    Returns:
        list: 包含前n个质数的列表
    """
    try:
        # 使用列表推导式找出所有质数并返回前n个
        return [num for num in numbers if is_prime(num)][:n]

    except Exception as e:
        print(f"错误: {str(e)}")
        return []


def main():
    # 测试用例
    test_cases = [
        ([4, 5, 6, 7, 8, 9, 10, 2, 3], 4),  # 混合数字
        ([1, 2, 3, 4, 5, 6, 7], 3),  # 连续数字
        ([10, 20, 30, 40, 50], 2),  # 无质数
        ([2, 3, 5, 7, 11, 13], 5),  # 全是质数
        ([1, 4, 6, 8, 9, 10], 2)  # 无质数
    ]

    print("开始测试top_primes函数...")
    for numbers, n in test_cases:
        result = top_primes(numbers, n=n)
        print(f"\n输入: {numbers}, n={n}")
        print(f"输出: {result}")


if __name__ == "__main__":
    main()